有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用来自其他模块的Springbean?

我想这很简单,但我找不到正确的搜索词组合来得到答案。如果我有一个多模块应用程序,我如何让模块a中的bean对模块B中的bean可用

项目设置看起来有点像这样:

project.ear/module-a.jar/resources/beans.xml
project.ear/module-a.jar/java/foo/bar.class
project.ear/module-b.war/java/foo/barFactory.class

豆子。类路径或文件系统都无法访问xml。有办法做到这一点吗?还是我应该改变一切


共 (2) 个答案

  1. # 1 楼答案

    我认为有一个比上面提到的3个斯卡夫曼更简单的解决方案

    1. 加入模块b.war/WEB-INF/WEB。以下几行:

      <context-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>

      classpath*:/resources/beans.xml

      </param-value>

      </context-param>

      这允许加载每个/resources/bean。来自任何类路径(即类路径上的任何jar)的xml,这对您来说已经足够了

    2. 您应该将module-a.jar作为module-b.war的一部分加载(module-a.jar位于module-b.war/WEB-INF/lib位置)

    在我的项目中,我有非常相似的粒度:业务逻辑。jar及其bean的配置和前端。war使用前一个版本中通过ref=“someBean”配置的bean。它起作用了

  2. # 2 楼答案

    应用服务器可能会对EAR中的每个模块使用不同的类加载器,从而防止一个模块在另一个模块中看到资源。这是JavaEE类加载器的默认行为

    你要么需要

    • 重新配置appserver,在整个EAR中使用“统一”类加载器(这是非常特定于appserver的,但如果可以让它工作的话,这很好),或者
    • 将所有内容打包成一个模块(例如,您的战争可能包含所有内容),或
    • 为WAR模块声明一个正式的清单,允许它声明其对各个JAR模块的依赖关系,这应该允许WAR查看JAR模块中的资源